共计 1475 个字符,预计需要花费 4 分钟才能阅读完成。
一. 作用
1. 元组与列表
- 元组其实就是 不可变 的列表
- 列表可读可改, 而元组只读不能改
- 同等数据类型下, 元组更加节省空间, 并且效率更高于列表
- 因为元组底层只提供读的机制, 而列表既有读也有改的机制
2. 元组的作用
- 显而易见, 也是按照位置存放多个值, 索引对应值
二. 定义方式
- 在 "()" 内用逗号分隔开多个任意类型的元素
- 如果元组内只包含一个元素, 那么需要用逗号隔开:
(111,)
- 元组不可变指的是 第一层 元素的 内存地址不能改变
- 如果第一层里面包含一个子列表, 那么子列表的内存地址不能改变, 但可以改变子列表里面的元素(列表可变类型)
- "工厂" :
tuple
🍉定义
l=(11,11.11,"aaa",[222,333]) #背后调用 l=tuple(...)
🍉定义单个值需要加逗号(没加就只是包含的意思)
x = (18)
y = (18,)
print(type(x)) #<class 'int'>
print(type(y)) #<class 'tuple'>
-
元组不可变解析
🍉元组的不可变类型解析
tup = (111,"aaa",[222,333])
print(id(tup[0]),id(tup[1]),id(tup[2]))
#140709693587136 2763387504816 2763386278472
tup[0] = 222 #报错
tup[1] = 333 #报错
tup[2] = 333 #报错
🍉当改变子列表内元素时
tup[2][0] = 333
print(tup[2]) #[333, 333]
🍉修改完成后查看, 元组第一层元素的 "id" 没有改变
print(id(tup[0]),id(tup[1]),id(tup[2]))
#140709693587136 2763387504816 2763386278472
三. 常用操作 + 内置方法
🐼优先掌握的操作(***)
1. 按照索引取值 (正向取 + 反向取) : 只能取
tup = (111,222,333,444,555)
🍉正向取
print(t[0]) #111
🍉反向取
print(t[-1]) #555
2. 切片 (顾头不顾尾 + 步长)
tup = (111,222,333,444,555,666)
🍉顾头不顾尾
print(t[0:3]) # (111,222,333)
🍉反转
tup2 = tup[::-1]
print(tup2) #(666,555,444,333,222,111)
3、长度 : .len()
tup = (111,222,333,444,555,666)
print(len(tup)) # 6
4、成员运算 int 和 not in
- 判断的是否 只是在第一层 元素中
tup = (111,"aaa",[222,333])
print(111 in tup) #True
print(222 in tup) #False
print([222,333] in tup) #True
5、循环
tup = (111,"aaa",[222,333])
for i in tup:
print(i)
# 111
# aaa
# [222, 333]
🐨需要掌握的操作(****)
1. 统计个数 : .count()
- 查看的是一个元素在元组中的个数, 查看的只是第一层
tup = (111,"aaa",222,222,[222,333])
print(tup.count(222)) # 2
2. 查找索引 : .index()
- 找到指定字符在列表中的索引, 可以指定范围查找
- 元组中没有像字符串中 : find、rfind、rindex 的这些方法
- 只是在第一层查找
tup = (111,"aaa",222[222,333])
print(tup.index("aaa",1,3)) # 1
四. 总结
-
可以存多个值
-
有序, 依赖索引取值
-
不可变类型 ---> 可 hash 类型
正文完